Analiza danych strukturalnych dotyczącyh sektora bankowego¶

Cel¶

Analiza danych strukturalnych sektora bankowego w ujęciu rocznym. W szczególności analiza liczby banków, oddziałów oraz zatrudnienia.

Założenia¶

W trakcie analizy nie uzwględniono roku 2009, ponieważ dane z tego roku dotyczą tylko grudnia 2009. Naszym celem jest analiza roczna, więc przyjmujemy ze jeden miesiąc nie daje nam dostatecznej informacji i odrzucmay te dane. Dodatkowo na wykresach "rok do roku" nie ujęto roku 2010, ponieważ jest on punktem odniesienia, do którego porównujemy rok 2011.

Kontekst¶

Na przedstawionych wykresach często pojawiają sie zmiany w oklicy roku 2013 oraz 2019. Należy wziąć pod uwagę fakt, że w 2013 roku nastąpiła zmiana w ustawie o funkcjonowaniu banków, w tym zmiany związane z nadzorem nad bankami komercyjnymi oraz spółdzielczymi (bardziej rygorystyczne przepisy). Natomiast w 2019 roku pandemia COVID-19 wpłynęła na gospodarkę, w tym ograniczone możliwości podróży, zwolnienia, niepokój o zdrowie i życie, co spowodowało zmiany także w sektorze bankowym.

In [76]:
import plotly.io as pio
pio.renderers.default = "notebook"

import pandas as pd
import numpy as np
import plotly.graph_objects as go
from plotly.subplots import make_subplots

import plotly.express as px
import plotly.offline as pyo

Anliza liczby banków¶

In [77]:
banki_dane_2009_2017 = pd.read_excel("C:/Users/katar/OneDrive/Pulpit/3.Bank/dane_2009_2017.xlsx", sheet_name = "Liczba_banków", engine = "openpyxl", header = 0)
banki_dane_2018_2024 = pd.read_excel("C:/Users/katar/OneDrive/Pulpit/3.Bank/dane_2018_2024.xlsx", sheet_name = "Liczba_banków", engine ="openpyxl", header = 0)
In [78]:
banki_dane_2009_2017.head()
Out[78]:
Liczba krajowych banków komercyjnych Liczba banków spółdzielczych Liczba oddziałów instytucji kredytowych Data
0 49 576 18 2009-12-31
1 48 576 19 2010-01-31
2 48 576 20 2010-02-28
3 49 576 20 2010-03-31
4 49 576 20 2010-04-30
In [79]:
banki_dane_2018_2024.head()
Out[79]:
Sektor bankowy Banki komercyjne Oddziały Banki spółdzielcze Data
0 616 35 29 552 2018-01-31
1 616 35 29 552 2018-02-28
2 616 35 29 552 2018-03-31
3 615 35 29 551 2018-04-30
4 615 35 29 551 2018-05-31
In [80]:
banki_dane_2009_2017.columns = ["Banki komercyjne", "Banki spółdzielcze", "Oddziały", "Data"]
banki_dane_2009_2017["Sektor bankowy"] = banki_dane_2009_2017[["Banki komercyjne", "Oddziały", "Banki spółdzielcze"]].sum(axis=1)
# banki_dane_2009_2017.dtypes
In [81]:
banki_dane_2018_2024.columns = ["Sektor bankowy" , "Banki komercyjne", "Oddziały", "Banki spółdzielcze", "Data"]
# banki_dane_2018_2024.dtypes
In [82]:
df_banki = pd.concat([banki_dane_2009_2017,banki_dane_2018_2024])
df_banki["Rok"] = df_banki["Data"].dt.year
df_banki = df_banki[["Banki komercyjne", "Oddziały", "Banki spółdzielcze", "Sektor bankowy", "Rok"]].groupby("Rok").sum().reset_index()
In [83]:
df_banki = df_banki.drop(index=0)
df_banki = df_banki.reset_index(drop=True)
In [84]:
df_banki.head()
Out[84]:
Rok Banki komercyjne Oddziały Banki spółdzielcze Sektor bankowy
0 2010 586 246 6912 7744
1 2011 576 256 6897 7729
2 2012 556 272 6875 7703
3 2013 508 328 6863 7699
4 2014 470 336 6807 7613

¶

Wykres 1 "Liczba banków i oddziałów instytucji kredytowych w latach 2010-2024"¶

In [85]:
fig = go.Figure()

fig.add_trace(go.Scatter(x=df_banki["Rok"], y=df_banki["Banki komercyjne"],
                         mode='lines+markers', name='Banki komercyjne'))

fig.add_trace(go.Scatter(x=df_banki["Rok"], y=df_banki["Banki spółdzielcze"],
                         mode='lines+markers', name='Banki spółdzielcze'))

fig.add_trace(go.Scatter(x=df_banki["Rok"], y=df_banki["Oddziały"],
                         mode='lines+markers', name='Oddziały instytucji kredytowych'))

fig.add_trace(go.Scatter(x=df_banki["Rok"], y=df_banki["Sektor bankowy"],
                         mode='lines+markers', name='Sektor bankowy')) 

fig.update_layout(
    title="Liczba banków i oddziałów w sektorze bankowym",
    xaxis_title="Rok",
    yaxis_title="Liczba jednostek",
    legend_title="Kategoria",
    template="plotly_white"
)

fig.show()

Wyniki:

Zauważyć można podobieństwo w wykresach liczebności banków spółdzielczych oraz sekotra bankowego ogólnie. Ponadto widoczna jest ogólna, wyraźna tendencja spadkowa na przestrzeni ostatniej dekady. Tylko wsród oddziałów instytucji kredytowych widać tendencję wzrostową. W okolicach roku 2019 liczba tych oddziałów jest większa niż banków komercyjncyh i trend ten utrzymuje się.

Wykres 2 "Zmiany procentowe liczby banków i oddziałów instytucji kredytowych na przestrzeni lat 2010-2024 rok do roku"¶

In [86]:
# roczne zmiany procentowe
df_dynamika = df_banki.copy()
for col in df_banki.columns[1:]:  
    df_dynamika[col] = df_banki[col].pct_change() * 100 

df_dynamika = df_dynamika.iloc[1:].reset_index(drop=True)
# print(df_dynamika)
In [87]:
correlation_matrix = df_banki.corr()
# print(correlation_matrix)
In [88]:
fig = make_subplots(rows=2, cols=2, subplot_titles=[
    "Banki komercyjne",
    "Banki spółdzielcze",
    "Oddziały instytucji kredytowych",
    "Sektor bankowy (ogólnie)"
])


categories = [
    ("Banki komercyjne", 1, 1),
    ("Banki spółdzielcze", 1, 2),
    ("Oddziały", 2, 1),
    ("Sektor bankowy", 2, 2),
]


for col_name, row, col in categories:
    fig.add_trace(go.Bar(x=df_dynamika["Rok"], y=df_dynamika[col_name], name=col_name),
                  row=row, col=col)


fig.update_layout(
    title="Dynamika zmian liczby banków i oddziałów (%) rok do roku",
    showlegend=False,
    template="plotly_white",
    height=600, 
)

fig.show()

Wyniki:

Banki komercyjne - widoczny wyraźny spadek około roku 2013, następnie zmiany pomału stabilizują się, by w 2019 roku odnotować kolejny spadek. Banki spółdzielcze - wyraźny spadek utrzymujący się od roku 2019 do 2022. Oddziały instytucji kredytowych - wysoki wzrost procentowy w 2013 roku. W roku 2016 spadek oraz lekki spadek w latach 2022-2024.

Zauważyć można, że w roku 2013 wraz ze wzrostem liczby oddziałów instytucji krdedytowych spada liczba banków komercyjnych. Możliwa jest relacja między tymi czynnikami (do dalszej analizy). Możliwe, że ma to związek z procesm konsolidacji (fuzje, przejęcia banków komercyjnych).

Analiza liczby oddziałów¶

In [89]:
oddzialy_dane_2009_2017 = pd.read_excel("C:/Users/katar/OneDrive/Pulpit/3.Bank/dane_2009_2017.xlsx", sheet_name = "Liczba_oddziałów", engine = "openpyxl", header = 0)
oddzialy_dane_2018_2024 = pd.read_excel("C:/Users/katar/OneDrive/Pulpit/3.Bank/dane_2018_2024.xlsx", sheet_name = "Liczba_oddziałów", engine ="openpyxl", header = 0)
In [90]:
oddzialy_dane_2009_2017.head()
oddzialy_dane_2009_2017.columns = ["Liczba oddziałów", "W kraju", "Za granicą", "Data"]
In [91]:
oddzialy_dane_2018_2024.head()
# print(oddzialy_dane_2018_2024.columns)
oddzialy_dane_2018_2024.columns = ["Liczba oddziałów", "W kraju", "Za granicą", "Data"]
In [92]:
# oddzialy_dane_2009_2017.dtypes
# oddzialy_dane_2018_2024.dtypes
In [93]:
df_oddzialy = pd.concat([oddzialy_dane_2009_2017, oddzialy_dane_2018_2024])
df_oddzialy["Rok"] = df_oddzialy["Data"].dt.year
#df_oddzialy.head()
In [94]:
df_oddzialy = df_oddzialy[["Liczba oddziałów", "W kraju", "Za granicą", "Rok"]].groupby("Rok").sum().reset_index()
#df_oddzialy.head()
In [95]:
df_oddzialy = df_oddzialy.drop(index=0)
df_oddzialy = df_oddzialy.reset_index(drop=True)
df_oddzialy.head()
Out[95]:
Rok Liczba oddziałów W kraju Za granicą
0 2010 82872 82631 241
1 2011 84678 84626 52
2 2012 86477 86421 56
3 2013 88754 88706 48
4 2014 87735 87686 49

Wykres 1 "Liczba oddziałów bankowych w kraju i za granicą w latach 2010-2024"¶

In [96]:
fig = go.Figure()

fig.add_trace(go.Scatter(x=df_oddzialy["Rok"], y=df_oddzialy["Liczba oddziałów"],
                         mode='lines+markers', name='Liczba oddziałów ogólnie'))

fig.add_trace(go.Scatter(x=df_oddzialy["Rok"], y=df_oddzialy["W kraju"],
                         mode='lines+markers', name='Liczba oddziałów w kraju'))

fig.add_trace(go.Scatter(x=df_oddzialy["Rok"], y=df_oddzialy["Za granicą"],
                         mode='lines+markers', name='Liczba oddziałów za granicą'))

fig.update_layout(
    title="Liczba oddziałów w kraju i za granicą (2010-2024)",
    xaxis_title="Rok",
    yaxis_title="Liczba oddziałów",
    legend_title="Kategoria",
    template="plotly_white"
)

fig.show()

Wyniki:

Liczba oddziałów zależy głównie od liczby oddziałów bankowych w kraju, co jest raczej oczekiwanym rezultatem. Jeśli chodzi natomiast o liczbę oddziałów za granicą to widać znaczy spadek pomiędzy rokiem 2010 i 2011, nastepnie utrzyjmuje się podobna, lekko wzrostowa tendencja.

Wykres 2 "Zmiany procentowe liczby oddziałów w kraju i za granicą na przestrzeni lat 2010-2024 rok do roku"¶

In [97]:
df_dynamika = df_oddzialy.copy()
for col in df_oddzialy.columns[1:]:  
    df_dynamika[col] = df_oddzialy[col].pct_change() * 100 
    
df_dynamika = df_dynamika.iloc[1:].reset_index(drop=True)
#print(df_dynamika)
In [98]:
fig = make_subplots(rows=1, cols=3, subplot_titles=[
    "Liczba oddziałów",
    "W kraju",
    "Za granicą",
])

categories = [
    ("Liczba oddziałów", 1, 1),
    ("W kraju", 1, 2),
    ("Za granicą", 1, 3)
]


for col_name, row, col in categories:
    fig.add_trace(go.Bar(x=df_dynamika["Rok"], y=df_dynamika[col_name], name=col_name),
                  row=row, col=col)

fig.update_layout(
    title="Dynamika zmian liczby oddziałów w kraju i za granicą rok do roku",
    showlegend=False,
    template="plotly_white",
    height=600, 
)

fig.show()

Wyniki:

Zauważyć można spadek liczby oddziałow po 2013 roku oraz jeszcze większy spadek po roku 2017, któy utrzymywał sie aż do 2022 roku. W 2023 i 2024 roku spadek dalej jest widoczny, ale jest wyraźnie mniejszy. Podobnie sytuacja wygląda jesli chodzi o wykres liczby oddziałów w kraju w ujęciu procentowym rok do roku. Natomiast za granicą w 2011 roku widać ogromny spadek (blisko 80% w porównanu do roku 2010), jednak w 2014 zaczyna się tendencja wzrostowa, która w 2017 roku sięga ponad 20%. W kolejnych latach widzimy naprzemienne spadki i wzrosty.

Analiza zatrudnienia¶

In [99]:
zatrudnienie_dane_2009_2017 = pd.read_excel("C:/Users/katar/OneDrive/Pulpit/3.Bank/dane_2009_2017.xlsx", sheet_name = "Zatrudnienie", engine = "openpyxl", header = 0)
zatrudnienie_dane_2018_2024 = pd.read_excel("C:/Users/katar/OneDrive/Pulpit/3.Bank/dane_2018_2024.xlsx", sheet_name = "Zatrudnienie", engine ="openpyxl", header = 0)
In [100]:
zatrudnienie_dane_2009_2017.head()
zatrudnienie_dane_2009_2017.dtypes
zatrudnienie_dane_2009_2017.columns
zatrudnienie_dane_2009_2017.columns = ["Liczba zatrudnionych", "W centrali", "W kraju", "Za granicą", "Data"]
In [101]:
zatrudnienie_dane_2018_2024.head()
zatrudnienie_dane_2018_2024.dtypes
zatrudnienie_dane_2018_2024.columns
zatrudnienie_dane_2018_2024.columns = ["Liczba zatrudnionych", "W centrali", "W kraju", "Za granicą", "Data"]
In [102]:
df_zatrudnienie = pd.concat([zatrudnienie_dane_2009_2017, zatrudnienie_dane_2018_2024])
df_zatrudnienie.head()
Out[102]:
Liczba zatrudnionych W centrali W kraju Za granicą Data
0 175249 68105 107009 135 2009-12-31
1 173966 67757 106080 129 2010-01-31
2 174258 68284 105841 133 2010-02-28
3 175497 68872 106493 132 2010-03-31
4 176705 69559 107012 134 2010-04-30
In [103]:
df_zatrudnienie["Rok"] = df_zatrudnienie["Data"].dt.year
df_zatrudnienie = df_zatrudnienie[["Liczba zatrudnionych", "W centrali", "W kraju", "Za granicą", "Rok"]].groupby("Rok").sum().reset_index()
# df_zatrudnienie.head()
In [104]:
df_zatrudnienie = df_zatrudnienie.drop(index=0)
df_zatrudnienie = df_zatrudnienie.reset_index(drop=True)
df_zatrudnienie.head()
Out[104]:
Rok Liczba zatrudnionych W centrali W kraju Za granicą
0 2010 2115616 837114 1276946 1556
1 2011 2129719 858884 1269146 1689
2 2012 2111444 868106 1241562 1776
3 2013 2091077 869009 1219422 2646
4 2014 2076505 867569 1206233 2703

Wykres 1 "Liczba osób zatrudnionych w banku w centrali, za granicą i w kraju w latach 2010-2024"¶

In [105]:
fig = go.Figure()

fig.add_trace(go.Scatter(x=df_zatrudnienie["Rok"], y=df_zatrudnienie["Liczba zatrudnionych"],
                         mode='lines+markers', name='Liczba zatrudnionych'))

fig.add_trace(go.Scatter(x=df_zatrudnienie["Rok"], y=df_zatrudnienie["W kraju"],
                         mode='lines+markers', name='W kraju'))

fig.add_trace(go.Scatter(x=df_zatrudnienie["Rok"], y=df_zatrudnienie["Za granicą"],
                         mode='lines+markers', name='Za granicą'))

fig.add_trace(go.Scatter(x=df_zatrudnienie["Rok"], y=df_zatrudnienie["W centrali"],
                         mode='lines+markers', name='W centrali'))

fig.update_layout(
    title="Liczba osób zatrudnionych w sektorze bankowym",
    xaxis_title="Rok",
    yaxis_title="Liczba pracowników",
    legend_title="Kategoria",
    template="plotly_white"
)

fig.show()

Wyniki:

Wykres osób zatrudnionych w kraju ma podobny przebieg co wykres osób zatrudnionych ogólnie, co jest zgodne z oczekiwaniami. W 2019 roku następuje widoczna zmiana trendu, wyraźnie zmniejszyła się liczb osób zatrudnionych, ogólnie jak i w kraju. Co ciekawe liczba pracowników zatrudnionych w centrali w latach 2019-2021 utrzymuje się na podobnym poziomie. Z kolei liczba pracowników za granicą sysytematycznie wzrasta, aż do 2020 roku, po czym nieznacznie maleje. Wykres liczby zatrudnionych w sektorze bankowym ogólnie spada aż do 2022, a następnie powoli wzrasta.

Wykres 2 "Zmiany procentowe liczby osób zatrudnionych w banku w centrali, za granicą i w kraju rok do roku"¶

In [106]:
df_dynamika = df_zatrudnienie.copy()
for col in df_zatrudnienie.columns[1:]:  
    df_dynamika[col] = df_zatrudnienie[col].pct_change() * 100 

df_dynamika = df_dynamika.iloc[1:].reset_index(drop=True)
#print(df_dynamika)
In [107]:
fig = make_subplots(rows=2, cols=2, subplot_titles=[
    "Liczba zatrudnionych",
    "W centrali",
    "W kraju",
    "Za granicą",
])

categories = [
    ("Liczba zatrudnionych", 1, 1),
    ("W centrali", 1, 2),
    ("W kraju", 2, 1),
    ("Za granicą", 2, 2)
]

for col_name, row, col in categories:
    fig.add_trace(go.Bar(x=df_dynamika["Rok"], y=df_dynamika[col_name], name=col_name),
                  row=row, col=col)

fig.update_layout(
    title="Dynamika zmian liczby zatrudninych w kraju i za granicą (%) rok do roku",
    showlegend=False,
    template="plotly_white",
    height=600, 
)

fig.show()

Wyniki:

Widoczna tendencja spadkowa osób zatrudnionych w bankach, w kraju. W 2013 roku widać, wzrost o ponad 40% w porónainu do roku 2012 liczby pracowników za granicą. Następnie dalej utrzymuje się tendencja wzrostowa, chociaż aż do 2020 roku. W centrali tylko w 2020 roku zatrudnono mniej osób w porówniu do roku wcześniejszego.